package work.thread_eg.pool;

import cn.hutool.core.date.DateUtil;
import work.entity.Student;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 可缓存线程池
 *
 * 特点
 *      1 创建一个可缓存线程池, 如果线程池长度超过处理需要, 可灵活回收空闲线程, 若无可回收,则新建线程
 *      2 最大线程数 maximumPoolSize是Integer类型的最大值 = 2的31次方-1 , 不会触发拒绝策略
 *      3 使用的队列是 SynchronousQueue (容量大小是0), 来了任务就创建线程运行
 *
 * 注意点
 *      1 如果同一时间创建的线程数过多, 每个线程的执行都会占用内存资源, 容易导致OOM内存溢出
 *
 */
public class CachedThreadPoolMain {

    public static void main(String[] args) {
        // 创建线程池对象
        ExecutorService executorService = Executors.newCachedThreadPool();
        for (int i = 1; i < 10; i++)
            executorService.submit(new Task());
    }

    static class Task implements Runnable {
        @Override
        public void run() {
            try {
//                Student student = new Student("沈明龙","120",11);
//                System.out.println(student);
                // 获取线程名称,默认格式:pool-1-thread-1
                System.out.println(DateUtil.now() + " " + Thread.currentThread().getName());
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
